// 获取小程序全局实例
let app = getApp();
// 定义页面配置对象
Page({
  /**
   * 页面的初始数据
   */
  data: {
    url: app.globalData.url, // 接口基础地址，用于拼接完整请求URL
    isPhoneBound: false, // 标记用户是否已绑定手机号
    phoneNumber: '', // 用于展示脱敏后的手机号（如138****5678）
    showPhoneModal: false, // 控制手机号输入弹窗的显示/隐藏状态
    inputPhone: '', // 存储用户在弹窗中输入的手机号
    isLoading: false, // 标记是否正在加载中，用于防止重复提交
    user: null // 显式声明user变量
  },
  /**
   * 生命周期函数--监听页面加载
   * 页面创建时执行一次
   */
  onLoad(options) {
    // 从全局配置中获取接口基础地址并保存到页面数据中
    this.setData({
      url: app.globalData.url
    });
    
    // 从本地缓存中获取用户信息
    const user = wx.getStorageSync('user');
    
    // 校验用户信息是否有效（存在且包含id）
    if (user && user.id) {
      // 有效则保存到页面数据中
      this.setData({ user });
    } 
  },

  /**
   * 生命周期函数--监听页面显示
   * 每次页面展示时执行（包括从后台切回）
   */
  onShow() {
    // 获取页面数据中的用户信息
    const { user } = this.data;
    
    // 只有用户信息有效时才查询手机号状态
    if (user && user.id) {
      this.checkPhoneStatus();
    }
  },
  /**
   * 查询用户当前手机号绑定状态
   */
  checkPhoneStatus() {
    // 保存this上下文，避免在回调函数中丢失
    const that = this;
    // 从页面数据中获取用户信息和接口地址
    const { user, url } = this.data;

    // 显示加载提示
    wx.showLoading({ title: '加载中...' });
    
    // 发起网络请求查询用户详情
    wx.request({
      url: `${url}User/${user.id}`, // 拼接完整请求地址（基础地址+用户ID）
      method: 'GET', // 使用GET方法
      success(res) {
        // 隐藏加载提示
        wx.hideLoading();
        // 判断请求是否成功（假设后端用code=200表示成功）
        if (res.data.code === 200) {
          // 提取用户数据
          const userData = res.data.data;
          // 获取手机号（如果不存在则设为空字符串）
          const phone = userData?.phone || '';
          // 如果手机号存在
          if (phone.trim()) {
            // 更新页面数据：标记已绑定，并显示脱敏后的手机号
            that.setData({
              isPhoneBound: true,
              phoneNumber: phone.replace(/^(\d{3})(\d{4})(\d{4})$/, '$1****$3')
            });
          } else {
            // 手机号不存在，标记为未绑定
            that.setData({ isPhoneBound: false });
          }
        } else {
          // 请求成功但业务处理失败
          wx.showToast({ title: '查询失败', icon: 'none' });
        }
      },
      fail() {
        // 网络请求失败
        wx.hideLoading();
        wx.showToast({ title: '网络异常', icon: 'none' });
      }
    });
  },

  /**
   * 点击"绑定/更换"按钮的处理函数
   */
  handlePhoneAction() {
    // 显示手机号输入弹窗
    this.setData({ showPhoneModal: true });
  },

  /**
   * 手机号输入框的实时更新处理函数
   */
  handlePhoneInput(e) {
    // 将输入框的值更新到页面数据中
    this.setData({ inputPhone: e.detail.value });
  },

  /**
   * 确认绑定/更换手机号的核心处理函数
   */
  confirmBind() {
    // 从页面数据中获取所需信息
    const { inputPhone, user, url } = this.data;
    
    // 1. 手机号格式校验
    const phone = inputPhone.trim(); // 去除首尾空格
    if (!phone) {
      // 手机号为空时提示
      wx.showToast({ title: '请输入手机号', icon: 'none' });
      return;
    }
      // 新增：判断是否以1开头
  if (phone[0] !== '1') {
    wx.showToast({ title: '手机号必须以1开头', icon: 'none' });
    return;
  }
    // 正则校验手机号格式（11位数字，以1开头）
    if (!/^1\d{10}$/.test(phone)) {
      wx.showToast({ title: '请输入正确的11位手机号', icon: 'none' });
      return;
    }

    // 2. 防止重复提交（如果正在加载中则直接返回）
    if (this.data.isLoading) return;
    // 设置加载状态为true
    this.setData({ isLoading: true });
    // 显示处理中提示
    wx.showLoading({ title: '处理中...' });

    // 保存this上下文
    const that = this;
    // 3. 调用后端接口更新手机号
    wx.request({
      url: `${url}User`, // 后端更新用户信息的接口地址
      method: 'PUT', // 使用PUT方法（通常用于更新资源）
      data: {
        id: user.id, // 用户ID（用于定位要更新的用户）
        phone: phone // 新手机号
      },
      header: {
        'content-type': 'application/json' // 声明请求数据格式为JSON
      },
      success(res) {
        // 隐藏加载提示
        wx.hideLoading();
        
        // 判断更新是否成功
        if (res.data.code === 200) {
          // 4. 操作成功：更新页面状态
          wx.showToast({ title: '操作成功', icon: 'success' });
          that.setData({
            isPhoneBound: true,
            // 脱敏显示新手机号
            phoneNumber: phone.replace(/^(\d{3})(\d{4})(\d{4})$/, '$1****$3'),
            showPhoneModal: false, // 关闭弹窗
            inputPhone: '', // 清空输入框
            isLoading: false // 重置加载状态
          });
          
          // 5. 同步更新缓存中的用户信息
          const updatedUser = wx.getStorageSync('user');
          updatedUser.phone = phone;
          wx.setStorageSync('user', updatedUser);
        } else {
          // 后端返回业务错误（如手机号已被占用）
          wx.showToast({ title: res.data.msg || '手机号已经被占用', icon: 'none' });
          that.setData({ isLoading: false });
        }
      },
      fail() {
        // 网络请求失败
        wx.hideLoading();
        wx.showToast({ title: '网络异常，请稍后再试', icon: 'none' });
        that.setData({ isLoading: false });
      }
    });
  },

  /**
   * 关闭弹窗的处理函数（取消按钮/遮罩层点击）
   */
  closeModal() {
    this.setData({
      showPhoneModal: false,
      inputPhone: '' // 清空输入框，避免下次弹窗残留上次输入
    });
  },

  /**
   * 其他生命周期函数（默认空实现）
   */
  onReady() {}, // 页面初次渲染完成时执行
  onHide() {}, // 页面隐藏时执行
  onUnload() {}, // 页面卸载时执行
  onPullDownRefresh() {}, // 下拉刷新时执行
  onReachBottom() {}, // 上拉触底时执行
  onShareAppMessage() {} // 分享时执行
})